home *** CD-ROM | disk | FTP | other *** search
- package koala.dynamicjava.util;
-
- import java.lang.reflect.Constructor;
- import java.lang.reflect.Field;
- import java.lang.reflect.Method;
- import java.lang.reflect.Modifier;
- import java.util.Iterator;
- import java.util.LinkedList;
- import java.util.List;
-
- public class ReflectionUtilities {
- // $FF: synthetic field
- private static Class class$Ljava$lang$Object;
-
- public static Constructor lookupConstructor(Class var0, Class[] var1) throws NoSuchMethodException {
- List var2 = getConstructors(var0, var1.length);
- LinkedList var3 = new LinkedList();
-
- for(Constructor var5 : var2) {
- if (hasCompatibleSignatures(var5.getParameterTypes(), var1)) {
- var3.add(var5);
- }
- }
-
- if (var3.isEmpty()) {
- throw new NoSuchMethodException(var0.getName() + " constructor");
- } else {
- Iterator var6 = var3.iterator();
-
- Constructor var7;
- for(var7 = (Constructor)var6.next(); var6.hasNext(); var7 = selectTheMostSpecificConstructor(var7, (Constructor)var6.next())) {
- }
-
- return var7;
- }
- }
-
- public static List getConstructors(Class var0, int var1) {
- LinkedList var2 = new LinkedList();
- Constructor[] var3 = var0.getDeclaredConstructors();
-
- for(int var4 = 0; var4 < var3.length; ++var4) {
- if (var3[var4].getParameterTypes().length == var1) {
- var2.add(var3[var4]);
- }
- }
-
- return var2;
- }
-
- public static Method lookupMethod(Class var0, String var1, List var2) throws NoSuchMethodException {
- return lookupMethod(var0, var1, (Class[])var2.toArray());
- }
-
- public static Method lookupMethod(Class var0, String var1, Class[] var2) throws NoSuchMethodException {
- List var3 = getMethods(var0, var1, var2.length);
- LinkedList var4 = new LinkedList();
-
- for(Method var6 : var3) {
- if (hasCompatibleSignatures(var6.getParameterTypes(), var2)) {
- var4.add(var6);
- }
- }
-
- if (var4.isEmpty()) {
- throw new NoSuchMethodException(var1);
- } else {
- Iterator var7 = var4.iterator();
-
- Method var8;
- for(var8 = (Method)var7.next(); var7.hasNext(); var8 = selectTheMostSpecificMethod(var8, (Method)var7.next())) {
- }
-
- return var8;
- }
- }
-
- public static List getMethods(Class var0, String var1, int var2) {
- LinkedList var3 = new LinkedList();
- if (var0.isInterface()) {
- Method[] var4 = var0.getDeclaredMethods();
-
- for(int var5 = 0; var5 < var4.length; ++var5) {
- if (var4[var5].getName().equals(var1) && var4[var5].getParameterTypes().length == var2) {
- var3.add(var4[var5]);
- }
- }
-
- Class[] var8 = var0.getInterfaces();
-
- for(int var6 = 0; var6 < var8.length; ++var6) {
- var3.addAll(getMethods(var8[var6], var1, var2));
- }
-
- if (var8.length == 0) {
- var3.addAll(getMethods(class$Ljava$lang$Object != null ? class$Ljava$lang$Object : (class$Ljava$lang$Object = class$("java.lang.Object")), var1, var2));
- }
- } else {
- for(Class var7 = var0; var7 != null; var7 = var7.getSuperclass()) {
- Method[] var9 = var7.getDeclaredMethods();
-
- for(int var10 = 0; var10 < var9.length; ++var10) {
- if (var9[var10].getName().equals(var1) && var9[var10].getParameterTypes().length == var2) {
- var3.add(var9[var10]);
- }
- }
- }
- }
-
- return var3;
- }
-
- public static Method lookupOuterMethod(Class var0, String var1, Class[] var2) throws NoSuchMethodException {
- boolean var3 = Modifier.isStatic(var0.getModifiers());
-
- for(Class var4 = var0 != null ? var0.getDeclaringClass() : null; var4 != null; var4 = var4.getDeclaringClass()) {
- var3 |= Modifier.isStatic(var4.getModifiers());
-
- try {
- Method var5 = lookupMethod(var4, var1, var2);
- if (!var3 || Modifier.isStatic(var5.getModifiers())) {
- return var5;
- }
- } catch (NoSuchMethodException var6) {
- }
- }
-
- throw new NoSuchMethodException(var1);
- }
-
- public static Field getField(Class var0, String var1) throws NoSuchFieldException, AmbiguousFieldException {
- for(Class var2 = var0; var2 != null; var2 = var2.getSuperclass()) {
- try {
- return var2.getDeclaredField(var1);
- } catch (NoSuchFieldException var10) {
- Class[] var4 = var2.getInterfaces();
- Field var5 = null;
-
- for(int var6 = 0; var6 < var4.length; ++var6) {
- Field var7 = null;
-
- try {
- var7 = getField(var4[var6], var1);
- } catch (NoSuchFieldException var9) {
- }
-
- if (var7 != null) {
- if (var5 != null && !var5.equals(var7)) {
- throw new AmbiguousFieldException(var1);
- }
-
- var5 = var7;
- }
- }
-
- if (var5 != null) {
- return var5;
- }
- }
- }
-
- throw new NoSuchFieldException(var1);
- }
-
- public static Field getOuterField(Class var0, String var1) throws NoSuchFieldException, AmbiguousFieldException {
- boolean var2 = Modifier.isStatic(var0.getModifiers());
-
- for(Class var3 = var0 != null ? var0.getDeclaringClass() : null; var3 != null; var3 = var3.getDeclaringClass()) {
- var2 |= Modifier.isStatic(var3.getModifiers());
-
- try {
- Field var4 = getField(var3, var1);
- if (!var2 || Modifier.isStatic(var4.getModifiers())) {
- return var4;
- }
- } catch (NoSuchFieldException var5) {
- }
- }
-
- throw new NoSuchFieldException(var1);
- }
-
- protected static Method selectTheMostSpecificMethod(Method var0, Method var1) {
- Class[] var2 = var0.getParameterTypes();
- Class[] var3 = var1.getParameterTypes();
-
- for(int var4 = 0; var4 < var2.length; ++var4) {
- if (var2[var4] != var3[var4]) {
- return isCompatible(var2[var4], var3[var4]) ? var1 : var0;
- }
- }
-
- return var0;
- }
-
- protected static Constructor selectTheMostSpecificConstructor(Constructor var0, Constructor var1) {
- Class[] var2 = var0.getParameterTypes();
- Class[] var3 = var1.getParameterTypes();
-
- for(int var4 = 0; var4 < var2.length; ++var4) {
- if (var2[var4] != var3[var4]) {
- if (isCompatible(var2[var4], var3[var4])) {
- return var1;
- }
-
- return var0;
- }
- }
-
- return var0;
- }
-
- public static boolean hasCompatibleSignatures(Class[] var0, Class[] var1) {
- for(int var2 = 0; var2 < var0.length; ++var2) {
- if (!isCompatible(var0[var2], var1[var2])) {
- return false;
- }
- }
-
- return true;
- }
-
- public static boolean isCompatible(Class var0, Class var1) {
- if (var0.isPrimitive()) {
- if (var0 == var1) {
- return true;
- } else if (var0 == Integer.TYPE) {
- return var1 == Byte.TYPE || var1 == Short.TYPE || var1 == Character.TYPE;
- } else if (var0 == Long.TYPE) {
- return var1 == Byte.TYPE || var1 == Short.TYPE || var1 == Integer.TYPE;
- } else if (var0 == Short.TYPE) {
- return var1 == Byte.TYPE;
- } else if (var0 == Float.TYPE) {
- return var1 == Byte.TYPE || var1 == Short.TYPE || var1 == Integer.TYPE || var1 == Long.TYPE;
- } else if (var0 != Double.TYPE) {
- return false;
- } else {
- return var1 == Byte.TYPE || var1 == Short.TYPE || var1 == Integer.TYPE || var1 == Long.TYPE || var1 == Float.TYPE;
- }
- } else {
- return var1 == null ? true : var0.isAssignableFrom(var1);
- }
- }
-
- // $FF: synthetic method
- static Class class$(String var0) {
- try {
- return Class.forName(var0);
- } catch (ClassNotFoundException var2) {
- throw new NoClassDefFoundError(((Throwable)var2).getMessage());
- }
- }
-
- protected ReflectionUtilities() {
- }
- }
-